Networked program dependency compatibility analysis

ABSTRACT

A web application may be developed in an environment which has different components than a target environment, so determining component dependencies and identifying which dependencies are met in a given environment can be helpful when deploying the application. Toward that end, test code makes a request that test file(s) be sent from a protected location in the target environment, such as from a randomly-named folder or from another location that is not directly browsable by a user. Received test file(s) and network protocol headers are parsed, and component dependency metadata such as component names and version numbers are extracted. Based on the extracted metadata, information is determined about the target environment&#39;s installed component(s). By comparing component dependency(ies) of the program with the identified installed component(s) of the target environment, compatibility of the target environment can then be reported.

BACKGROUND

A stand-alone program includes within a single executable or other fileall of the code that is needed to run the program on a given operatingsystem. Some stand-alone programs are slightly more flexible, e.g., byincluding all of their necessary code in multiple files within a singlefile system directory. All of the stand-alone program's code is normallyinstalled or uninstalled as a unit. Accordingly, changes to a part ofthe code may be deployed either as a binary patch or by re-installationof the entire rebuilt program. However, a stand-alone program can avoidproblems arising from missing or inconsistent components of the programbecause all parts of its code, in mutually consistent versions, arelinked or otherwise bound to the program and are installed when theprogram is installed.

By contrast, a component-based program does not stand alone. Instead, acomponent-based program relies on the availability of code in properlyconfigured components that are called by, but not necessarily installedwith, the rest of the program. Code that is reusable in differentapplication programs can be provided in a component, so that all of theprograms using the component get the benefit of improvements in thecomponent. Using components can also reduce RAM memory and disk storagerequirements by reducing the number of copies of particular code.However, effective deployment and use of component-based programs callsfor careful attention to any dependencies between different components,and to dependencies between different application programs and thecomponents they share.

SUMMARY

A web application or other networked program may be developed in asource context that has different components than the target to whichthe program is deployed, so dependencies that were satisfied in thesource are not met in the target. Determining a program's dependencies,and identifying which dependencies are met and which are unsatisfied ina given environment, can be helpful when deploying the program in newcontexts.

Some embodiments described herein help analyze dependency compatibilityof a target environment of a networked program. Using software and anetworking protocol, a request is made for test file(s) from a protectedlocation in the target environment. The protected location may be alocation which is not directly browsable by a user, for example, becausedirectory name browsing is disabled, because a directory name isobfuscated, and/or because a randomly-generated identifier forms part ofthe directory name, for a directory at the protected location. Receivedtest file(s) (including network protocol headers) are parsed andcomponent dependency metadata such as component names and versionnumbers are extracted. Based on the extracted metadata, information isdetermined about the target environment's installed component(s) andtheir configurations. By comparing component dependency(ies) of theprogram with the identified installed component(s) of the targetenvironment, compatibility of the target environment can then bereported and assessed.

Embodiment activities may be viewed from the perspective of a person whois controlling software for an embodiment, or from the perspective ofthe software (and supporting hardware) which is configured to performcertain activities. Activities may also be specific to certain kinds ofnetworked programs, such as web applications, and certain networkprotocols, such as HTTP protocols (HTTP and/or HTTPS). For example, someembodiments request test files in the form of test pages from aprotected location in the target environment, and do so by using atleast one HTTP protocol and location information which is specific tothe protected location

In some variations, the activities of interest include causing softwareto upload the test pages or other test file(s) to the protected locationprior to a networking protocol request for the test file(s). In some,they include causing software to delete the test file(s) from theprotected location after a networking protocol request for the testfile(s). In some cases, activities of interest include causing softwareto detect component dependency(ies) of the program at a location outsidethe target environment, e.g., in the source environment. Someembodiments infer a component status (absent, present, version ifpresent) of the target environment from response(s) to HTTP request(s)for the test page(s), e.g., from “OK”, “not found”, or “accessforbidden” responses.

Attention may be focused in given embodiments on a target environment,on a source environment, or on the combined environments. Within atarget environment of some embodiments, for example, a memory inoperable communication with a logical processor contains a folderstructure having an application root, a fixed-name folder under theapplication root, a randomly-named folder under the fixed-name folder,and a set of test files under the randomly-named folder. The test fileshave variable component dependencies which depend upon the presence ofapplication components in the target environment. The test files mayinclude web pages. In some variations, the randomly-named folder has aname which includes a randomly generated GUID.

Within a source environment of some embodiments, another memory inoperable communication with another logical processor contains a testcode capable of causing that logical processor to assist in analysis ofdependency compatibility of the target environment with respect to anetworked program. Assistance may include requesting transmission of atleast one test file from the target environment by using a networkingprotocol (e.g., HTTP), extracting component dependency metadata byparsing received test file(s) (e.g., web pages), and identifyinginstalled components of the target environment based on the extractedmetadata, for example. The test code may also be capable of creating therandomly-named folder and uploading test page(s) to the randomly-namedfolder prior to an HTTP request by the test code for transmission of thetest page(s), capable of deleting test page(s) from the randomly-namedfolder and deleting the randomly-named folder after an HTTP request bythe test code for transmission of the test page(s), and capable of otheractivities discussed herein.

The examples given are merely illustrative. This Summary is not intendedto identify key features or essential features of the claimed subjectmatter, nor is it intended to be used to limit the scope of the claimedsubject matter. Rather, this Summary is provided to introduce—in asimplified form—some concepts that are further described below in theDetailed Description. The innovation is defined with claims, and to theextent this Summary conflicts with the claims, the claims shouldprevail.

DESCRIPTION OF THE DRAWINGS

A more particular description will be given with reference to theattached drawings. These drawings only illustrate selected aspects andthus do not fully determine coverage or scope.

FIG. 1 is a block diagram illustrating a computer system having a sourceenvironment, a target environment, or both, with each environment havingat least one processor, at least one memory, and other items in anoperating environment which may be present on multiple network nodes,and also illustrating configured storage medium embodiments;

FIG. 2 is a block diagram illustrating an example architecture fornetworked program dependency compatibility analysis;

FIG. 3 is a flow chart illustrating steps of some process and configuredstorage medium embodiments; and

FIG. 4 is a data flow diagram illustrating a web application dependencycompatibility analysis.

DETAILED DESCRIPTION

Overview

Web applications are often developed on computers that are differentthan the computer on which they are eventually run. For example, certaincomponents required for the application to function correctly may bepresent on the source but not on the destination. If the applicationdoes not function correctly once it is deployed to the destination, itcan be difficult to diagnose why this is the case because the persondoing the deployment often does not have visibility into what componentsare installed on the destination.

Some embodiments described herein assist analysis of the compatibilityof a target destination with regard to the presence, absence, andversion of components available to a web application at the destinationin view of the application's component dependencies. For example, someembodiments upload a set of test pages to a secure folder in thedestination. Next, HTTP requests for them are made, and test code parsesfor well-known markers in the responses. If the well-known markers arefound, test code determines that the component is installed (and alsoextracts some metadata about it, such as version), otherwise, the codedetermines that the component is not installed. Some embodiments detectan application's dependent components on the source computer.

Some embodiments described herein may be viewed in a broader context.For instance, concepts such as source locations, target locations,communication between networked locations, software components, andcomponent dependencies may be relevant to a particular embodiment.However, it does not follow from the availability of a broad contextthat exclusive rights are being sought herein for abstract ideas; theyare not. Rather, the present disclosure is focused on providingappropriately specific embodiments. Other media, systems, and methodsinvolving source locations, target locations, communication betweennetworked locations, software components, and component dependencies areoutside the present scope. Accordingly, vagueness and accompanying proofproblems are also avoided under a proper understanding of the presentdisclosure.

Reference will now be made to exemplary embodiments such as thoseillustrated in the drawings, and specific language will be used hereinto describe the same. But alterations and further modifications of thefeatures illustrated herein, and additional applications of theprinciples illustrated herein, which would occur to one skilled in therelevant art(s) and having possession of this disclosure, should beconsidered within the scope of the claims.

The meaning of terms is clarified in this disclosure, so the claimsshould be read with careful attention to these clarifications. Specificexamples are given, but those of skill in the relevant art(s) willunderstand that other examples may also fall within the meaning of theterms used, and within the scope of one or more claims. Terms do notnecessarily have the same meaning here that they have in general usage,in the usage of a particular industry, or in a particular dictionary orset of dictionaries. Reference numerals may be used with variousphrasings, to help show the breadth of a term. Omission of a referencenumeral from a given piece of text does not necessarily mean that thecontent of a Figure is not being discussed by the text. The inventorsassert and exercise their right to their own lexicography. Terms may bedefined, either explicitly or implicitly, here in the DetailedDescription and/or elsewhere in the application file.

As used herein, a “computer system” may include, for example, one ormore servers, motherboards, processing nodes, personal computers(portable or not), personal digital assistants, cell or mobile phones,other mobile devices having at least a processor and a memory, and/orother device(s) providing one or more processors controlled at least inpart by instructions. The instructions may be in the form of firmware orother software in memory and/or specialized circuitry. In particular,although it may occur that many embodiments run on workstation or laptopcomputers, other embodiments may run on other computing devices, and anyone or more such devices may be part of a given embodiment.

A “multithreaded” computer system is a computer system which supportsmultiple execution threads. The term “thread” should be understood toinclude any code capable of or subject to synchronization, and may alsobe known by another name, such as “task,” “process,” or “coroutine,” forexample. The threads may run in parallel, in sequence, or in acombination of parallel execution (e.g., multiprocessing) and sequentialexecution (e.g., time-sliced). Multithreaded environments have beendesigned in various configurations. Execution threads may run inparallel, or threads may be organized for parallel execution butactually take turns executing in sequence. Multithreading may beimplemented, for example, by running different threads on differentcores in a multiprocessing environment, by time-slicing differentthreads on a single processor core, or by some combination oftime-sliced and multi-processor threading. Thread context switches maybe initiated, for example, by a kernel's thread scheduler, by user-spacesignals, or by a combination of user-space and kernel operations.Threads may take turns operating on shared data, or each thread mayoperate on its own data, for example.

A “logical processor” or “processor” is a single independent hardwarethread-processing unit. For example a hyperthreaded quad core chiprunning two threads per core has eight logical processors. Processorsmay be general purpose, or they may be tailored for specific uses suchas graphics processing, signal processing, floating-point arithmeticprocessing, encryption, I/O processing, and so on.

A “multiprocessor” computer system is a computer system which hasmultiple logical processors. Multiprocessor environments occur invarious configurations. In a given configuration, all of the processorsmay be functionally equal, whereas in another configuration someprocessors may differ from other processors by virtue of havingdifferent hardware capabilities, different software assignments, orboth. Depending on the configuration, processors may be tightly coupledto each other on a single bus, or they may be loosely coupled. In someconfigurations the processors share a central memory, in some they eachhave their own local memory, and in some configurations both shared andlocal memories are present.

“Kernels” include operating systems, hypervisors, virtual machines, BIOScode, and similar hardware interface software.

“Code” means processor instructions, data (which includes constants,variables, and data structures), or both instructions and data.

“Program” is used broadly herein, to include applications, kernels,drivers, interrupt handlers, libraries, and other code written byprogrammers (who are also referred to as developers).

“Automatically” means by use of automation (e.g., general purposecomputing hardware configured by software for specific operationsdiscussed herein), as opposed to without automation. In particular,steps performed “automatically” are not performed by hand on paper or ina person's mind; they are performed with a machine. However,“automatically” does not necessarily mean “immediately”.

“Networking protocol” means HTTP, HTTPS, FTP, or any other applicationlayer networking protocol.

“HTTP” means HTTP and/or HTTPS unless expressly stated otherwise, e.g.,“HTTP only” or “secure HTTP (HTTPS)”.

Throughout this document, use of the optional plural “(s)” means thatone or more of the indicated feature is present. For example, “file(s)”means “one or more files” or equivalently “at least one file”.

Throughout this document, unless expressly stated otherwise anyreference to a step in a process presumes that the step may be performeddirectly by a party of interest and/or performed indirectly by the partythrough intervening mechanisms and/or intervening entities, and stilllie within the scope of the step. That is, direct performance of thestep by the party of interest is not required unless direct performanceis an expressly stated requirement. For example, a step involving actionby a party of interest and a destination, such as “requesting”,“extracting”, “uploading”, “detecting”, “transmitting”, “sending”,“issuing”, or “communicating” to a destination, may involve interveningaction such as forwarding, copying, uploading, downloading, encoding,decoding, compressing, decompressing, encrypting, decrypting and so onby some other party, yet still be understood as being performed directlyby the party of interest.

Whenever reference is made to data or instructions, it is understoodthat these items configure a computer-readable memory therebytransforming it to a particular article, as opposed to simply existingon paper, in a person's mind, or as a transitory signal on a wire, forexample.

Operating Environments

With reference to FIG. 1, an operating environment 100 for an embodimentmay include a computer system 102, which in turn includes a sourceenvironment 103, a target environment 105, or both environments. Thesource environment 103 is sometimes referred to as a local environment,and the target environment is sometimes referred to as a remote ordestination environment. The computer system 102 of a given environmentmay be a multiprocessor computer system, or not. An operatingenvironment 100 may include one or more machines in a given computersystem, which may be clustered, client-server networked, and/orpeer-to-peer networked.

The term “computer system” is used herein in various ways, to reflect topossibility of various configurations. A single machine can be acomputer system, and a group of machines organized to operatecollectively can also be a computer system. The single machine, or thecollective of machines, can each operate as a source environment, as atarget environment, or as a combination of the two environments,depending on the configuration employed.

Human users 104 may interact with the computer system 102 of either orboth environments 103, 105, such as by using displays, keyboards, andother peripherals 106. System administrators, developers, engineers,testers, application deployment personnel, and end-users are each aparticular type of user 104. Automated agents acting on behalf of one ormore people may also be users 104. Storage devices and/or networkingdevices may be considered peripheral equipment in some embodiments.Other computer systems not shown in FIG. 1 may interact with thecomputer system 102 or with another system embodiment using one or moreconnections to a network 108 via network interface equipment, forexample.

The computer system 102 includes at least one logical processor 110. Thecomputer system 102, like other suitable systems, also includes one ormore computer-readable storage media 112. Media 112 may be of differentphysical types. The storage media 112 may be volatile memory,non-volatile memory, fixed in place media, removable media, magneticmedia, optical media, and/or of other types of storage media (as opposedto merely propagated signals). In particular, a configured medium 114such as a CD, DVD, memory stick, or other removable non-volatile memorymedium may become functionally part of the computer system when insertedor otherwise installed, making its content accessible for use byprocessor 110. The removable configured medium 114 is an example of acomputer-readable storage medium 112. Some other examples ofcomputer-readable storage media 112 include built-in RAM, ROM, harddisks, and other storage devices which are not readily removable byusers 104.

The medium 114 is configured with instructions 116 that are executableby a processor 110; “executable” is used in a broad sense herein toinclude machine code, interpretable code, and code that runs on avirtual machine, for example. The medium 114 is also configured withdata 118 which is created, modified, referenced, and/or otherwise usedby execution of the instructions 116. The instructions 116 and the data118 configure the medium 114 in which they reside; when that memory is afunctional part of a given computer system, the instructions 116 anddata 118 also configure that computer system. In some embodiments, aportion of the data 118 is representative of real-world items such asproduct characteristics, inventories, physical measurements, settings,images, readings, targets, volumes, and so forth. Such data is alsotransformed as discussed herein, e.g., by installation, extraction,deletion, uploading, binding, deployment, execution, modification,display, creation, loading, and/or other operations.

A networked program 120 such as a web application 122, other software, ahierarchy or other structure 124 of folders 126 (a.k.a. directories),files, and other items shown in the Figures and/or discussed in the textmay reside partially or entirely within one or more media 112, therebyconfiguring those media. The networked program 120 may rely on theavailability of certain installed components 128 to operate as designed,and thus have component dependencies 130, which may be implicit and/orexplicitly represented. Program installers 132 (themselves a form ofsoftware) such as web application installers may be present to installcomponents 128, to check for dependencies 130, or both. In addition toprocessor(s) and memory, an operating environment may also include otherhardware, such as display(s) 134, buses, power supplies, andaccelerators, for instance.

One or more items are shown in outline form in FIG. 1 to emphasize thatthey are not necessarily part of the illustrated operating environment,but may interoperate with items in the operating environment asdiscussed herein. It does not follow that items not in outline form arenecessarily required, in any Figure or any embodiment.

Systems

FIG. 2 illustrates an architecture which is suitable for use with someembodiments. Within a target environment 105, storage media 112 areconfigured by a folder structure 124 which includes an application root202, with a fixed-name folder 204 and a randomly-named folder 206 underit, used as described herein. Test files 208, such as web pages 210,reside in the randomly-named folder 206. Test code 212 creates the testfolders 204, 206, uploads the test files 208, and deletes the test filesand the test folders.

Within a source environment 103, storage media 112 are configured bytest code 212, and by component dependency metadata 214 extracted by thetest code from responses 216 to requests 218 sent by the test code. Thetest code in the source environment 103 and the test code in the targetenvironment 105 may be the same, or they may be different butcooperating codes.

In some embodiments, for example, test code 212 includes or invokes codeto detect an application's local dependencies 130 on a source computersystem 102. Determining what components 128 an application 122 dependson locally can be accomplished, for example, using a combination of theMicrosoft® Web Platform Installer (WebPI) API and heuristics about fileextensions. For example, WebPI may indicate that an application dependson PHP. If this information is unavailable, test code can determine thisdependency by looking for *.php files in the application.

In some embodiments, test code 212 includes code to upload test pages210 to a secure location on the destination computer system 102. Forexample, some embodiments upload test pages in the following folderstructure on a destination computer:

Application_root \ fixed_guid \ random guid |_test_page1 |_test_page2

In some embodiments, test code 212 creates a new folder 204, under theapplication root, with a well-known name, fixed_guid. Next, each timepublish compatibility test code 212 runs a dependency compatibilitytesting session, test code 212 creates a random guid-named folder 206underneath the fixed_guid folder 204 and places test pages 210underneath folder 206. This approach prevents users from being able tobrowse directly to the test pages, which helps prevent testing frominterfering with other uses of the computer system and also helpsmaintain the functionality of the testing process.

In some embodiments, test code 212 renders, parses, and deletes testpages. Test code 212 in the source environment HTTP requests 218 testpages 210, and parses dependency-specific metadata 214 from theresponses 216, which may include test pages 210 and/or error/responsecodes (e.g., “success”, “file not found”, “access forbidden”). Someembodiments treat all non-successful codes alike, whereas otherembodiments distinguish between some kinds of failure, e.g., byindicating to an end user that the component is not installed inresponse to a “file not found” code and indicating that the componentcan be enabled via a control panel in response to an “access forbidden”code. When available and/or desired information about dependencies hasbeen gleaned from the responses, test code 212 in the target environmentdeletes the test pages 210. In some embodiments, dependency data caninclude not only whether a component is installed, but also thecomponent's configuration. One example of component configuration iswhich features or sub-features of the component are enabled. Anotherexample is whether a security condition interferes with a component,e.g., whether a module that only runs in a full trust security contextis subject to a medium trust context, or whether an option setting in aninstalled driver prevents an application from running.

With continued reference to FIGS. 1 and 2, some embodiments provide acomputer system 102 which includes a target environment 105. The targetenvironment includes a logical processor 110 and a memory 112 inoperable communication with the logical processor. A folder structure124 residing in the memory has an application root 202, a fixed-namefolder 204 under the application root, a randomly-named folder 206 underthe fixed-name folder, and a set of test files 208 under therandomly-named folder. The test files 208 have variable componentdependencies 130 which depend upon the presence of applicationcomponents 128 in the target environment.

In some embodiments, the test files 208 include web pages 210. Moregenerally, test files 208 may include any file of a type utilized as aseparately-installable component of a networked program 120.

In some embodiments, the randomly-named folder 206 has a name whichincludes a randomly generated GUID (globally unique identifier). Moregenerally, the randomly-named folder 206 name may include (that is,consist partly or entirely of) a randomly generated string ofalphanumeric characters. “Random” for this purpose includes fullyrandom, pseudo-random, and other strings which are unlikely to havesemantic meaning to human users and hence unlikely to be chosen for useby human users. In some embodiments, the test files 208 are protected byan authentication mechanism. For example, HTTP basic authentication canbe used, by implanting a one-time user and password in each test file asan authentication mechanism, so that only the software that uploads thefiles 208 can read them back.

In some embodiments, the target environment 105 is combined with asource environment 103. The source environment includes another logicalprocessor 110 and another memory 112 in operable communication with thatlogical processor. A test code 212 residing in that memory is capable ofcausing that logical processor to perform a process for assistinganalysis of dependency compatibility of the target environment 105 withrespect to a networked program 120. The process includes requestingtransmission of at least one test file 208 from the target environmentby using a networking protocol, extracting component dependency metadata214 by parsing received test file(s), and identifying installedcomponents 128 of the target environment based on the extractedmetadata. In particular, the test files may include web pages 210, andthe networking protocol may include an HTTP protocol.

In some embodiments, the system includes test code 212 capable ofcreating the randomly-named folder 206 and uploading test page(s) 210 tothe randomly-named folder prior to an HTTP request 218 by the test codefor transmission of the test page(s). In some, the test code is capableof deleting test page(s) from the randomly-named folder and deleting therandomly-named folder after an HTTP request by the test code fortransmission of the test page(s).

In some embodiments, the system includes test code 212 which is capable(among other things) of detecting component dependency(ies) 130 of theprogram in the source environment. For example, some familiar installers132 can detect component dependencies.

In some embodiments, the test code 212 is capable of inferring at leastone of the following from response(s) 216 to request(s) for transmissionof test page(s) from the randomly-named folder: a particular component128 is absent from the target environment, a particular component 128 ispresent in the target environment. In some, the test code is capable ofextracting version numbers as component dependency metadata 214.

In some embodiments peripherals 106 such as human user I/O devices(screen, keyboard, mouse, tablet, microphone, speaker, motion sensor,etc.) will be present in operable communication with one or moreprocessors 110 and memory. However, an embodiment may also be deeplyembedded in a system, such that no human user 104 interacts directlywith the embodiment. Software processes may be users 104.

In some embodiments, the system includes multiple computers connected bya network. Networking interface equipment can provide access to networks108, using components such as a packet-switched network interface card,a wireless transceiver, or a telephone network interface, for example,will be present in a computer system. However, an embodiment may alsocommunicate through direct memory access, removable nonvolatile media,or other information storage-retrieval and/or transmission approaches,or an embodiment in a computer system may operate without communicatingwith other computer systems.

Some embodiments operate in a “cloud” computing environment and/or a“cloud” storage environment. For example, target environments 105 may beon multiple devices/systems 102 in a networked cloud, source environmenttest code 212 may be stored on yet other devices within the cloud, anddependency compatibility analysis results may configure the display 134on yet other cloud device(s)/system(s) 102.

Processes

FIG. 3 illustrates some process embodiments in a flowchart 300.Processes shown in the Figures may be performed in some embodimentsautomatically, e.g., by test code 212 under control of a scriptrequiring little or no human user input. Processes may also be performedin part automatically and in part manually unless otherwise indicated.In a given embodiment zero or more illustrated steps of a process may berepeated, perhaps with different parameters or data to operate on. Stepsin an embodiment may also be done in a different order than thetop-to-bottom order that is laid out in FIG. 3. Steps may be performedserially, in a partially overlapping manner, or fully in parallel. Theorder in which flowchart 300 is traversed to indicate the stepsperformed during a process may vary from one performance of the processto another performance of the process. The flowchart traversal order mayalso vary from one process embodiment to another process embodiment.Steps may also be omitted, combined, renamed, regrouped, or otherwisedepart from the illustrated flow, provided that the process performed isoperable and conforms to at least one claim.

Examples are provided herein to help illustrate aspects of thetechnology, but the examples given within this document do not describeall possible embodiments. Embodiments are not limited to the specificimplementations, arrangements, displays, features, approaches, orscenarios provided herein. A given embodiment may include additional ordifferent features, mechanisms, and/or data structures, for instance,and may otherwise depart from the examples provided herein.

During an action causing step 302, a user causes software and/orhardware to take a specified action. Processes for component dependencytesting are not performed mentally, but human users can initiate andcontrol specific actions in computer systems to achieve tangible changesand results.

Step 302 may be accomplished by using software interfaces, scripts,remote commands, or the like, to perform one or more of steps 304, 308,312-332, 336-340, for example.

During a protocol using step 304, a user or an embodiment acting onbehalf of a user uses a networking protocol 306, such as HTTP, HTTPS,FTP, or another application-level networking protocol, to perform one ormore of steps 308, 312, 322, 324, 326, for example.

During a requesting step 308, a user or an embodiment acting on behalfof a user requests one or more test files 208 from a remote protectedlocation 310, such as a randomly-named folder 206 in another machine, oranother machine's folder that is not directly browsable. Step 308 may beaccomplished using 304 an HTTP or HTTPS request 218, for example.

During a receiving step 312, a user or an embodiment acting on behalf ofa user receives one or more requested 308 test files 208. Step 312 maybe accomplished using 304 an HTTP or HTTPS response 216, for example.

During a parsing step 314, a response 216 is parsed. Parsing may beaccomplished by test code 212 using lexical analysis, syntacticanalysis, and semantic analysis informed by familiar tools andtechniques and adapted for use as described herein to detect thepresence, absence, version number, and other metadata 214 ofcomponent(s) 128.

During a metadata extracting step 316, metadata 214 of component(s) 128is extracted, e.g., by noting it in tables, lists, or other datastructures while parsing 314 a response 216. For example, HTTP headersmay be parsed and version numbers found therein can be extracted bycopying them to a report for subsequent display or other output 322.

During a component identifying step 318, an embodiment identifiescomponents 128 actually installed on a target system, based on extracted316 metadata 214.

During a comparing step 320, an embodiment compares known dependencies130 of a program 120 in a local environment 103 to available components128 found in a target environment 105. For example, comparison mayreveal whether any required components are not present at the target, ornot present in a required version. Comparison may be accomplished usinglist comparison, bit vector comparison, and/or other familiar comparisonmethods, consistent with data structures used in test code to representcomponents and dependencies.

During a result outputting step 322, an embodiment prints, writes to afile, displays, and/or transmits as an XML document or in or anotherformat, some or all result(s) of comparison 320.

During an uploading step 324, an embodiment uploads test file(s) 208toward (or directly to) a protected location 310 in a targetenvironment, e.g., by commanding a local file copy or creation, or bytransmitting test files from another networked machine.

During deleting step 326, an embodiment deletes test file(s) 208 from aprotected location 310 in a target environment, e.g., by commanding alocal file move or a local file delete.

During a dependency detecting step 328, an embodiment detects componentdependencies, e.g., by invoking that functionality in an installer 132and/or by noting file extensions that indicate a program's reliance onparticular types of files known or presumed to be separatelyinstallable.

During a component status inferring step 330, an embodiment infers acomponent 128 status from a status code in a response 216. For example,a “file not found” status code may cause test code 212 to infer a“requested component not installed on target” status.

During a random identifier generating step 332, an embodiment generatesa random or pseudo-random identifier 334 for use as part or all of afolder 206 name. Familiar randomization mechanisms, and familiaridentifier syntaxes and identifiers (e.g., GUIDs), may be utilized.

During a folder creating step 336, an embodiment creates one or morefolders 204, 206, e.g., using familiar file system folder (directory)creation tools and (for creating folders 206) using random identifier(s)334.

During a folder deleting (cleaning up) step 338, an embodiment deletesone or more folders 204, 206, and their contents, e.g., by usingfamiliar file system folder (directory) and file deletion tools. Folderdeletion 338 may include file deletion 326.

During a version number extracting step 340, an embodiment extracts oneor more component 128 version numbers 342 while parsing 314 response(s)216.

During a memory configuring step 344, a memory medium 112 is configuredby test code 212, by folder(s) 204, 206 providing a protected location310, or otherwise in connection with a networked program componentdependency analysis as discussed herein.

FIG. 4 is a data flow diagram illustrating a web application dependencycompatibility analysis, that is, a special case of the foregoing inwhich the networking protocol 306 is an HTTP protocol (HTTP and/orHTTPS) and the test files 208 are web pages 210.

The foregoing steps and their interrelationships are discussed ingreater detail below, in connection with various embodiments.

Some embodiments provide a process for helping a person analyzedependency compatibility of a target environment of a networked program.The process includes causing 302 software to use 304 at least onenetworking protocol to request 308 at least one test file from at leastone protected location in the target environment, namely, from alocation which is not directly browsable. The process also includescausing 302 software to extract 316 component dependency metadata byparsing 314 received test file(s), causing 302 software to identify 318at least one installed component of the target environment based on theextracted metadata, and comparing 320 component dependency(ies) of theprogram with the identified installed component(s) of the targetenvironment.

Some embodiments also include causing 302 software to upload 324 thetest file(s) to the protected location prior to a networking protocolrequest for the test file(s). Some also include causing 302 software todelete 326 the test file(s) from the protected location after anetworking protocol request for the test file(s). Some include causing302 software to detect 328 component dependency(ies) of the program at alocation outside the target environment.

Some embodiments provide a process in a local environment for assistinganalysis of dependency compatibility of a target environment of anetworked program, namely a web application. The process includesautomatically requesting 308 test pages from a protected location in thetarget environment by using 304 at least one HTTP protocol and locationinformation (e.g., the name of a folder 206) which is specific to theprotected location, extracting 316 component dependency metadata byparsing received test pages, identifying 318 installed components of thetarget environment based on the extracted metadata, comparing 320component dependencies of the program with the identified installedcomponents of the target environment, and outputting 322 results of thecomparing step.

In some embodiments, the process further includes uploading 324 the testpage(s) to the protected location prior to an HTTP request for the testpage(s). In some, the process includes deleting 326 the test page(s)from the protected location after an HTTP request for the test page(s).In some embodiments, the process includes detecting 328 componentdependency(ies) of the program in the local environment. In some, itincludes inferring 330 a component status of the target environment fromresponse(s) to HTTP request(s) for the test page(s).

Configured Media

Some embodiments include a configured computer-readable storage medium112. Medium 112 may include disks (magnetic, optical, or otherwise),RAM, EEPROMS or other ROMs, and/or other configurable memory, includingin particular computer-readable storage media (as opposed to propagatedsignal media). The storage medium which is configured may be inparticular a removable storage medium 114 such as a CD, DVD, or flashmemory. A general-purpose memory, which may be removable or not, and maybe volatile or not, can be configured into an embodiment using itemssuch as test code 212, comparison 320 results, and folder 206 names, inthe form of data 118 and instructions 116, read from a removable medium114 and/or another source such as a network connection, to form aconfigured medium. The configured medium 112 is capable of causing acomputer system to perform process steps for transforming data throughdependency compatibility analysis as disclosed herein. FIGS. 1 through 4thus help illustrate configured storage media embodiments and processembodiments, as well as system and process embodiments. In particular,any of the process steps illustrated in FIG. 3 and/or FIG. 4, orotherwise taught herein, may be used to help configure a storage mediumto form a configured medium embodiment.

CONCLUSION

Although particular embodiments are expressly illustrated and describedherein as processes, as configured media, or as systems, it will beappreciated that discussion of one type of embodiment also generallyextends to other embodiment types. For instance, the descriptions ofprocesses in connection with FIGS. 3 and 4 also help describe configuredmedia, and help describe the operation of systems and manufactures likethose discussed in connection with other Figures. It does not followthat limitations from one embodiment are necessarily read into another.In particular, processes are not necessarily limited to the datastructures and arrangements presented while discussing systems ormanufactures such as configured memories.

Not every item shown in the Figures need be present in every embodiment.Conversely, an embodiment may contain item(s) not shown expressly in theFigures. Although some possibilities are illustrated here in text anddrawings by specific examples, embodiments may depart from theseexamples. For instance, specific features of an example may be omitted,renamed, grouped differently, repeated, instantiated in hardware and/orsoftware differently, or be a mix of features appearing in two or moreof the examples. Functionality shown at one location may also beprovided at a different location in some embodiments.

Reference has been made to the figures throughout by reference numerals.Any apparent inconsistencies in the phrasing associated with a givenreference numeral, in the figures or in the text, should be understoodas simply broadening the scope of what is referenced by that numeral.

As used herein, terms such as “a” and “the” are inclusive of one or moreof the indicated item or step. In particular, in the claims a referenceto an item generally means at least one such item is present and areference to a step means at least one instance of the step isperformed.

Headings are for convenience only; information on a given topic may befound outside the section whose heading indicates that topic.

All claims as filed are part of the specification.

While exemplary embodiments have been shown in the drawings anddescribed above, it will be apparent to those of ordinary skill in theart that numerous modifications can be made without departing from theprinciples and concepts set forth in the claims, and that suchmodifications need not encompass an entire abstract concept. Althoughthe subject matter is described in language specific to structuralfeatures and/or procedural acts, it is to be understood that the subjectmatter defined in the appended claims is not necessarily limited to thespecific features or acts described above the claims. It is notnecessary for every means or aspect identified in a given definition orexample to be present or to be utilized in every embodiment. Rather, thespecific features and acts described are disclosed as examples forconsideration when implementing the claims.

All changes which fall short of enveloping an entire abstract idea butcome within the meaning and range of equivalency of the claims are to beembraced within their scope to the full extent permitted by law.

What is claimed is:
 1. A computer process performed with a computingsystem in order to analyze dependency compatibility of a targetenvironment of a networked program, the computer process comprising thesteps of: a source environment computing system requesting at least onetest file from the target environment by making a request that at leastone test file be sent from at least one location in the targetenvironment, the requesting step using at least at least one networkingprotocol and a memory of the computing system to make the request, thetest file not itself an installed component of the networked program buthaving at least one variable component dependency which depends upon thepresence of at least one component of the networked program in thetarget environment, the test file also being of a type utilized as aseparately installable component of the networked program, the test filealso not merely a result of running an installer in the targetenvironment to detect component dependencies; the source environmentcomputing system receiving a response to the request, wherein theresponse includes at least one of the following: at least one test filesent from the target environment, at least one error code whichindicates at least one of the following: “file not found”, “accessforbidden”; the computing system extracting component dependencymetadata by parsing the received response to the request; and thecomputing system identifying at least one installed component of thetarget environment based on the extracted metadata.
 2. The computerprocess of claim 1, wherein the extracted metadata comprises aninstalled component version number.
 3. The computer process of claim 1,wherein the extracted metadata indicates at least one of the following:a particular feature of the installed component is not enabled; asecurity trust context interferes with the installed component; anoption setting in an installed driver prevents an application fromrunning the installed component.
 4. The computer process of claim 1,further comprising at least one of the following: requesting anothertest file (denoted here “test-file-Y”), receiving another response(denoted here “response-Y”) as a result of that requesting step, parsingresponse-Y to obtain an error code indicating that test-file-Y was notfound, and as a result of the parsing step inferring a component statusindicating that a component of the networked program is not installed inthe target environment; requesting another test file (denoted here“test-file-W”), receiving another response (denoted here “response-W”)as a result of that requesting step, parsing response-W to obtain anerror code indicating that access to test-file-W is forbidden, and as aresult of the parsing step inferring a component status indicating thata component of the networked program is not available but can be enabledin the target environment.
 5. The computer process of claim 1, furthercomprising at least one of the following steps: uploading at least onetest file to the target environment prior to the requesting step;deleting at least one test file from the target environment prior to therequesting step.
 6. The computer process of claim 1, further comprisingdetecting at least one component dependency of the networked program,with the detecting step performed outside the target environment.
 7. Acomputer-readable storage medium configured with data and withinstructions that when executed by at least one processor causes theprocessor(s) to perform a process for assisting analysis of dependencycompatibility of a target environment of a networked program whichincludes pages as components when the networked program is installed,the process comprising the steps of: automatically requesting a testpage from a location in the target environment by using at least onenetworking protocol, the test page itself not an installed component ofthe networked program but having at least one variable componentdependency which depends upon the presence of at least one component ofthe networked program in the target environment, the test page also notmerely a result of software run in the target environment to detectcomponent dependencies; receiving a response to the request over anetwork connection via network interface equipment, wherein the responseincludes at least one of the following: at least one test page sent fromthe target environment, at least one error code which indicates at leastone of the following: “file not found”, “access forbidden”;automatically extracting component dependency metadata by parsing thereceived response; automatically identifying a status of at least onecomponent based on the extracted metadata; comparing componentdependencies of the networked program with identified installedcomponents of the target environment; and outputting results of thecomparing step.
 8. The configured storage medium of claim 7, wherein theprocess further comprises detecting component dependency(ies) of theprogram by running software in the target environment.
 9. The configuredstorage medium of claim 7, wherein the step of requesting a test pageuses location information comprising a folder name which includes arandomly generated identifier.
 10. The configured storage medium ofclaim 7, wherein the step of requesting a test page uses locationinformation specifying a location which is not directly browsablebecause directory name browsing is disabled in at least a portion of thetarget environment which includes the location.
 11. The configuredstorage medium of claim 7, wherein the identifying step identifies oneof the following as the status of the component: the component is absentfrom the target environment, the component is present in the targetenvironment.
 12. The configured storage medium of claim 7, wherein theextracted metadata indicates at least one of the following: a particularfeature of the installed component is not enabled; a security trustcontext interferes with the installed component; an option setting in aninstalled driver prevents an application from running the installedcomponent; an installed component version number.
 13. A computer systemcomprising: at least one logical processor; at least one memory inoperable communication with at least one logical processor; and a testcode residing in at least one memory which is part of a sourceenvironment in the computer system, wherein the test code upon executionby at least one processor assists in analysis of application programdependency compatibility of a target environment outside the computersystem by requesting transmission of a test file from the targetenvironment, extracting component dependency metadata by parsing areceived test file, and identifying at least one installed component ofan application program in the target environment, wherein the receivedtest file is not itself a component of the application program but hasat least one variable component dependency which depends upon thepresence of at least one component of the application program in thetarget environment, and the test file is also not merely a result ofcode run in the target environment to detect the application program'sdependencies, and the test file is of a type utilized as a separatelyinstallable component of the application program.
 14. The computersystem of claim 13, wherein the test file comprises a web page which issubject to an implanted authentication mechanism.
 15. The computersystem of claim 13, further comprising a folder structure in the targetenvironment which comprises at least one of the following: arandomly-named folder containing at least one test file; a folder whichhas a name that includes a randomly generated GUID and which contains atleast one test file.
 16. The computer system of claim 13, wherein thetest code upon execution also performs at least one of the following:creates a folder in the target environment and uploads test files to thefolder; deletes test files from a folder in the target environment anddeletes the folder.
 17. The computer system of claim 13, furthercomprising at least two of the following kinds of extracted metadataresiding in memory: metadata indicating that a particular feature of aninstalled component is not enabled; metadata indicating that a securitytrust context interferes with the installed component; metadataindicating that an option setting in an installed driver prevents anapplication from running the installed component; metadata indicating aninstalled component version number.
 18. The computer system of claim 13,further comprising at least three of the following kinds of extractedmetadata residing in memory: metadata indicating that a particularfeature of an installed component is not enabled; metadata indicatingthat a security trust context interferes with the installed component;metadata indicating that an option setting in an installed driverprevents an application from running the installed component; metadataindicating an installed component version number; metadata indicating aninstalled component name.
 19. The computer system of claim 13, whereinthe test code upon execution also detects component dependencies of theapplication program in the source environment.
 20. The computer systemof claim 13, wherein the test code upon execution also performs at leastone of the following: parses a response to obtain an error codeindicating that a test file was not found, and as a result infers that acomponent of the application program is not installed in the targetenvironment; parses a response to obtain an error code indicating thataccess to a test file is forbidden, and as a result infers that acomponent of the application program can be enabled in the targetenvironment.